package com.luyuan.web.controller.tool;

import com.luyuan.common.core.controller.BaseController;
import com.luyuan.common.core.domain.AjaxResult;
import com.luyuan.common.utils.OssUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * OSS对象存储管理控制器
 *
 * @author luyuan
 */
@RestController
@RequestMapping("/oss/manage")
public class OssManageController extends BaseController {

    /**
     * 文件上传
     *
     * @param file 文件
     * @return 结果
     */
    @PostMapping("/upload")
    public AjaxResult uploadFile(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return AjaxResult.error("上传文件不能为空");
        }

        try {
            // 上传文件到OSS
            String fileUrl = OssUtils.uploadFile(file);
            if (fileUrl != null) {
                Map<String, Object> result = new HashMap<>();
                result.put("url", fileUrl);
                result.put("fileName", file.getOriginalFilename());
                result.put("size", file.getSize());
                return AjaxResult.success("上传成功", result);
            } else {
                return AjaxResult.error("上传失败");
            }
        } catch (Exception e) {
            return AjaxResult.error("上传异常：" + e.getMessage());
        }
    }

    /**
     * 多文件上传
     *
     * @param files 文件数组
     * @return 结果
     */
    @PostMapping("/uploads")
    public AjaxResult uploadFiles(@RequestParam("files") MultipartFile[] files) {
        if (files == null || files.length == 0) {
            return AjaxResult.error("上传文件不能为空");
        }

        try {
            List<Map<String, Object>> results = new ArrayList<>();
            for (MultipartFile file : files) {
                if (!file.isEmpty()) {
                    // 上传文件到OSS
                    String fileUrl = OssUtils.uploadFile(file);
                    if (fileUrl != null) {
                        Map<String, Object> result = new HashMap<>();
                        result.put("url", fileUrl);
                        result.put("fileName", file.getOriginalFilename());
                        result.put("size", file.getSize());
                        results.add(result);
                    }
                }
            }

            if (!results.isEmpty()) {
                return AjaxResult.success("上传成功", results);
            } else {
                return AjaxResult.error("上传失败");
            }
        } catch (Exception e) {
            return AjaxResult.error("上传异常：" + e.getMessage());
        }
    }

    /**
     * 删除文件
     *
     * @param fileName 文件名
     * @return 结果
     */
    @DeleteMapping("/delete")
    public AjaxResult deleteFile(@RequestParam("fileName") String fileName) {
        if (fileName == null || fileName.isEmpty()) {
            return AjaxResult.error("文件名不能为空");
        }

        try {
            // 删除OSS上的文件
            boolean result = OssUtils.deleteFile(fileName);
            if (result) {
                return AjaxResult.success("删除成功");
            } else {
                return AjaxResult.error("删除失败");
            }
        } catch (Exception e) {
            return AjaxResult.error("删除异常：" + e.getMessage());
        }
    }
}